package com.tom.architect.party3.day29.rxjava;

public class ObservableJust<T> extends Observable<T> {
    private T item;
    public ObservableJust(T item) {
        this.item = item;
    }

    @Override
    protected void subscribeActual(Observer<T> observer) {
        // 代理对象。方法调用. 方便代码扩展
     /*   observer.onSubscribe();
        try {
            observer.onNext(item);
        } catch (Exception e) {
            observer.onError(e); // 异常时调用onError。
        }
        observer.onComplete(); */

        ScalarDisposable sd = new ScalarDisposable(observer, item);
        observer.onSubscribe(); // 回调方法1
        sd.run();
    }

    // 代理对象，有利于拓展 Disposable的功能。
    private class ScalarDisposable<T> /* implements Observer*/ {
        private Observer<T> observer; // 静态代理对象，未实现目标接口
        private T item;
        public ScalarDisposable(Observer<T> observer, T item) {
            this.observer = observer;
            this.item = item;
        }

        public void run() {
            try {
                observer.onNext(item); // 回调方法2
                observer.onComplete(); // 回调方法3
            } catch (Exception e) {
                observer.onError(e); // 回调方法4.
            }
        }
    }
}
